package com.sinog.biz.service.business.impl;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.sinog.biz.mapper.havexml.AbPrisonerMapper;
import com.sinog.biz.mapper.havexml.AbZoufangMapper;
import com.sinog.biz.service.business.PrisonerVisitService;
import com.sinog.biz.util.CodeUrlUtils;
import com.sinog.biz.util.IdGen;
import com.sinog.core.domain.AbZoufangResultVo;
import com.sinog.core.util.JsonUtil;
import com.sinog.core.util.PageReturnUtil;
import com.sinog.core.util.StrUtil;
import com.sinog.core.utilbean.Result;
import com.sinog.core.utilbean.ReturnCode;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @desc 安置帮教管理 - 帮教工作信息管理 - 帮教对象走访管理
 * @author wangxj
 * @date 2022/3/9 11:14
 */
@Slf4j
@Service
public class PrisonerVisitServiceImpl implements PrisonerVisitService {

    @Autowired
    private AbZoufangMapper abZoufangMapper;
    @Autowired
    private AbPrisonerMapper abPrisonerMapper;

    /**
     * 安置帮教管理 - 帮教对象信息管理 - 帮教对象走访管理 - 未走访列表
     * @param pageIndex pageIndex
     * @param pageSize pageSize
     * @param parameterMap parameterMap
     * @param departId 当前用户ID
     * @param level 当前登录用户level
     * @param orgid 上级编号
     * @return String
     */
    @Override
    public String getUnZfBaseInfoList(Integer pageIndex,Integer pageSize,Map<String,Object> parameterMap,String departId,int level,String orgid) {
        Page<Map<String,String>> page = new Page<>(pageIndex + 1,pageSize);
        page = page.setRecords(abPrisonerMapper.getUnZfBaseInfoList(page,parameterMap,departId,level,orgid));
        return PageReturnUtil.pageReturn(page);
    }

    /**
     * 安置帮教管理 - 帮教对象信息管理 - 帮教对象走访管理 - 已走访列表
     * @param pageIndex pageIndex
     * @param pageSize pageSize
     * @param parameterMap 条件 -- 名称模糊查询,是否重点帮教对象,上次走访时间
     * @param departId 当前用户ID
     * @param level 当前登录用户level
     * @param orgid 上级编号
     * @return String
     */
    @Override
    public String getZfBaseInfoList(Integer pageIndex,Integer pageSize,Map<String,Object> parameterMap,String departId,int level,String orgid) {
        Page<Map<String,String>> page = new Page<>(pageIndex + 1,pageSize);
        List<Map<String,String>> unZfBaseInfoList = abPrisonerMapper.getZfBaseInfoList(page,parameterMap,departId,level,orgid);
        page = page.setRecords(unZfBaseInfoList);
        return PageReturnUtil.pageReturn(page);
    }

    /**
     * 安置帮教管理 - 帮教工作信息管理 - 帮教对象走访管理 - 走访 - 查看
     * @param priNum 服刑人员编号
     * @return Result
     */
    @Override
    public Result getPrisonerBaseInfo(String priNum) {
        Map<String,Object> result = new HashMap<>(16);
        result.put("prisonerBaseInfo",abPrisonerMapper.getPrisonerBaseInfo(priNum));
        return Result.success(result);
    }

    /**
     * 安置帮教管理 - 帮教工作信息管理 - 帮教对象走访管理 - 走访 - 查看(获取走访信息)
     * @param zfId 走访编号
     * @return Result
     */
    @Override
    public Result getzfBaseInfo(String zfId) {
        Map<String,Object> zfBaseInfo = abZoufangMapper.getZfBaseInfo(zfId);
        if(null != zfBaseInfo) {
            return Result.success(zfBaseInfo);
        }
        return Result.failure(ReturnCode.FAILURE);
    }

    /**
     * 帮教工作管理 - 帮教对象走访管理 - 帮教对象走访管理 - 新增/编辑 - 走访保存
     * @param dataStr 保存信息
     * @return Result
     */
    @Override
    public Result saveBjZfInfo(String dataStr) {
        //参数实体
        AbZoufangResultVo abZoufangResultVo = JsonUtil.toBean(dataStr,AbZoufangResultVo.class);
        if(StringUtils.isBlank(abZoufangResultVo.getId())) {
            abZoufangResultVo.setId(IdGen.strid());
        }
        boolean tag = abZoufangResultVo.insertOrUpdate();
        if(tag) {
            return Result.success("保存成功");
        }
        return Result.failure(ReturnCode.SAVE_FAILED);
    }

    /**
     * 帮教工作管理 - 帮教对象走访管理 - 帮教对象走访管理 - 删除走访
     * @param zfId 走访编号
     * @return Result
     */
    @Override
    public Result delZfInfoAction(String zfId) {
        int num = abZoufangMapper.deleteZfBaseInfo(zfId);
        if(0 < num) {
            return Result.success("删除成功");
        }
        return Result.failure(ReturnCode.FAILURE);
    }

    /**
     * 安置帮教管理 - 帮教工作信息管理 - 帮教对象走访管理 - 走访 - 列表
     * @param priNum 服刑人员编号
     * @return List<Map < String,Object>>
     */
    @Override
    public List<Map<String,Object>> getZfInfoList(String priNum) {
        //本系统的本地code
        String flag = CodeUrlUtils.getLocalCodeStartTwo();
        List<Map<String,Object>> list = abZoufangMapper.getZfInfoList(priNum,flag);
        List<Map<String,Object>> reList = new ArrayList<>(16);
        for(Map<String,Object> map : list) {
            reList.add(StrUtil.mapToString(map));
        }
        return reList;
    }
}